package com.zlzlib.libnetty.listener;


/**
 * 数据格式的含义转化
 *
 * @DateTime: 2020/9/30 17:40
 * @Author zlz
 * @Version 1.0
 */
public interface NettyDataListener<T> {

    T changeMsgData(Object o);

    /**
     * @param msg 消息
     * @return 判断消息是否为空
     */
    boolean isDataEmpty(T msg);

    /**
     * @param msg 消息 可以为空
     * @return 消息得唯一id  用与超时重发的标识  如果为空就不重发
     */
    String getMsgId(T msg);

    /**
     * @param msg 消息 可以为空 如果为空就不发
     * @return 消息发送失败时 向上层客户端发送失败的信息
     */
    T getSendFailMsg(T msg);

    /**
     * @param msg 可以为空
     * @return 获得客户端接收成功 像服务器回传接收成功状态的消息 如果不需要向服务器发送则返回null
     */
    T getReceivedReportMsg(T msg);

    /**
     * 可以为空 为空时就不执行握手信息
     *
     * @return 获取由应用层构造的握手消息
     */
    T getHandshakeMsg();

    /**
     * @return 获取由应用层构造的心跳消息
     */
    T getHeartbeatMsg();

    /**
     * @param msg 握手消息
     * @return 握手消息是否成功
     */
    boolean isHandshakeSuccess(T msg);

    /**
     * @param msg 消息
     * @return 是否是服务器标识消息发送状态的消息
     */
    boolean isServerSentReport(T msg);

    /**
     * @param msg 报告服务消息
     * @return 报告服务消息是否发送成功
     */
    boolean isServerSentReportSuccess(T msg);

    /**
     * @param msg 消息
     * @return 是否为握手状态消息
     */
    boolean isHandshakeMsg(T msg);

    /**
     * @param msg 消息
     * @return 是否为心跳消息
     */
    boolean isHeartbeatMsg(T msg);

    /**
     * @param msg 消息
     * @return 是否为接收报告消息
     */
    boolean isReceivedReportMsg(T msg);
}
